package com.chixing.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
class DeadLetterRabbitConfig {
    /**
     * 真正消费队列Q2
     * @return
     */
    @Bean
    Queue msgQueue() {
        return new Queue("Q2");
    }

    /**
     * 创建交换机
     * @return
     */
    @Bean
    DirectExchange directExchange() {
        return new DirectExchange("exchange");
    }

    /**
     * 交换机绑定Q1
     * @return
     */
    @Bean
    public Binding bindCacheQueue() {
        return BindingBuilder.bind(putShipCacheQueue()).to(directExchange()).with("Q1");
    }

    /**
     * 交换机绑定Q2
     * @return
     */
    @Bean
    public Binding bindRealQueue() {
        return BindingBuilder.bind(msgQueue()).to(directExchange()).with("Q2");
    }

    /**
     * 配置死信对列
     * @return
     */
    @Bean
    Queue putShipCacheQueue() {
        Map<String, Object> map = new HashMap<>();
        //配置队列过期时间，队列里的所有消息存活时间，如果不设置则可以设置每条消息的存活时间，如果两者都设置了，则以小的那个为准
        map.put("x-message-ttl",10000);
        //绑定到一个交换机
        map.put("x-dead-letter-exchange", "exchange");
        //路由到真正消费的对列Q2
        map.put("x-dead-letter-routing-key", "Q2");
        return new Queue("Q1", true, false, false, map);
    }

}
